`ifndef PROT_DEFINE
`define PROT_DEFINE

    // protocol field declare
    // layer: data link
    `define DATALINK_IPV4                   16'h0800
    `define DATALINK_ARP                    16'h0806
    `define DATALINK_RARP                   16'h8035
    // layer: network
    `define NETWORK_UDP                     8'd17
    // layer: transport(deal the dedicated protocol)


    // ARP protocol content
    `define ARP_SET_HARD_TYPE               1
    `define ARP_SET_PROT_TYPE               16'h0800
    `define ARP_SET_HARD_LEN                6
    `define ARP_SET_PROT_LEN                4
    `define ARP_SET_OP                      1
    `define ARP_GEN_HARD_TYPE               1
    `define ARP_GEN_PROT_TYPE               16'h0800
    `define ARP_GEN_HARD_LEN                6
    `define ARP_GEN_PROT_LEN                4
    `define ARP_GEN_OP                      2


    // protocol location
    // layer: data link
    `define DATALINK_PROT_LOC               96 // "protocol" type start from 96+32(bits)
    
    // protocol address
    `define NP_MAC_ADDR                     48'h02_00_00_00_00_01
    `define NP_IP_ADDR                      32'hc0_a8_00_01
    `define NP_PORT_ADDR                    16'h2A_F8

    // protocol steal has action
    `define PROTOCOL_ACTION_ADDITION        32'hA5_5A_A5_5A

    // rx channel data bit-width
    `define BUS_CONVERT_IN_DATA_WIDTH       32
    `define BUS_CONVERT_IN_MOD_WIDTH        2
    `define BUS_CONVERT_IN_BYTE_PER_CYCLE   4 // "2^(BUS_CONVERT_IN_MOD_WIDTH)"
    `define BUS_CONVERT_OUT_DATA_WIDTH      128
    `define BUS_CONVERT_OUT_MOD_WIDTH       4

    // dedicated protocol
    `define PROTOCOL_ORDER_WIDTH            30
    `define PROTOCOL_ADDR_WIDTH             32
    `define PROTOCOL_DATA_WIDTH             32




    // Generate fixed frame header
    `define IP_VERSION                      4'h4
    `define IP_HEADER_LENGTH                4'h5
    `define IP_TOS                          8'h00
    // `define IP_TOTAL_LENGTH              16'

    `define IP_IDENTIFICATION               16'h444c
    `define IP_FLAG                         3'b000
    `define IP_OFFSET                       13'h0000

    `define IP_TTL                          8'hff
    `define IP_PROTOCOL                     8'h11
    // `define IP_HEADER_CHECKSUM           16'

    // `define UDP_TOTAL_LENGTH             16'
    // `define UDP_CHECKSUM                 16'
`endif
